package com.wingstudio.springcloud.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Author ITcz
 * @Data 2021-04-25 - 21:59
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface RedisLock {
    /**
    * 一般是业务名
     * @return
    * */
    String prefixKey() default "";

    /**
    * 一般是数据的主键值
     * lockKey的命名尽量保持'x='+#x的方式。
     * 如果变量是个对象，需要获取到对象中的值，例如是order对象中的orderSn，可以通过order.orderSn方式获取。
     * 需要注意的是，常量'orderSn='需要用单引号'，否则会被当做是赋值语法，而#后面的orderSn只要和方法中的变量名orderSn保持一直就可以了
     * @return
    * */
    String keyId() default "";

    /**
    * 获取锁的超时时间 单位s
     * @return
    * */
    double timeout() default 0.3;

    /**
    * 开锁时间即自动过期时间 单位s
     * @return
    * */
    long lockLeaseTime() default 10;
}
